Apache POI একটি শক্তিশালী লাইব্রেরি যা Microsoft Office ফাইল (যেমন Excel, Word, PowerPoint) পড়া এবং লেখার জন্য ব্যবহৃত হয়। এর মধ্যে কিছু উন্নত ফিচার এবং performance optimization কৌশল রয়েছে, যা বৃহত্তর ডেটা বা সিস্টেম রিসোর্স ব্যবহারের ক্ষেত্রে বিশেষভাবে গুরুত্বপূর্ণ। নিচে Apache POI এর কিছু advanced features এবং performance optimization টিপস নিয়ে আলোচনা করা হলো।
১. Advanced Features
১.১. Streaming API (SXSSF for Excel)
SXSSF (Streaming XML Spreadsheet Format) হল একটি Apache POI API যা Excel 2007+ ফাইল (XLSX) এর জন্য বিশেষভাবে তৈরি করা হয়েছে। এটি Excel ফাইলগুলি তৈরি করার সময় memory-efficient পদ্ধতিতে কাজ করে, বিশেষ করে যখন বড় পরিমাণ ডেটা লেখার প্রয়োজন হয়।
SXSSF এক্সেল ফাইল লেখার সময় কিছু সেল তৈরি করেই সেগুলোকে ডিস্কে লেখে এবং পরে পুরনো সেলগুলো মুছে ফেলে, ফলে মেমরি ব্যবহারের পরিমাণ অনেক কমে যায়।
উদাহরণ: SXSSF ব্যবহার করে Excel ফাইল তৈরি
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class SXSSFExample {
public static void main(String[] args) throws IOException {
Workbook workbook = new SXSSFWorkbook(100); // Keep 100 rows in memory
Sheet sheet = workbook.createSheet("Sheet 1");
// Add data
for (int rowNum = 0; rowNum < 100000; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 10; cellNum++) {
row.createCell(cellNum).setCellValue("Row " + rowNum + " Cell " + cellNum);
}
}
try (FileOutputStream fileOut = new FileOutputStream("sxssf_example.xlsx")) {
workbook.write(fileOut);
}
((SXSSFWorkbook) workbook).dispose(); // Dispose of temporary files
workbook.close();
}
}
এখানে, SXSSFWorkbook ব্যবহার করে 100,000 সেল ধারণকারী একটি এক্সেল ফাইল তৈরি করা হয়েছে। মেমরি ব্যবহারের জন্য শুধুমাত্র 100টি সারি মেমরিতে রাখা হবে।
১.২. Data Validations
Excel ফাইলে data validation ব্যবহার করে সেলগুলিতে ইনপুট কন্ট্রোল সেট করা যেতে পারে (যেমন: drop-down lists, numeric ranges, date ranges)। Apache POI এর মাধ্যমে সহজেই এসব কন্ট্রোল যোগ করা যায়।
উদাহরণ: Drop-Down List তৈরি করা
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataValidationExample {
public static void main(String[] args) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
// Create a data validation list (drop-down)
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createExplicitListConstraint(new String[] {"Option 1", "Option 2", "Option 3"});
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); // Apply to cell A1
DataValidation validation = helper.createValidation(constraint, addressList);
// Apply data validation to the cell
sheet.addValidationData(validation);
try (FileOutputStream fileOut = new FileOutputStream("data_validation_example.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
}
}
এখানে drop-down তালিকা (data validation) তৈরি করা হয়েছে, যা A1 সেলে তিনটি অপশন প্রদান করবে।
১.৩. Chart Creation
Apache POI এর মাধ্যমে Excel ফাইলে charts তৈরি করা সম্ভব। আপনি bar charts, line charts, pie charts ইত্যাদি তৈরি করতে পারেন এবং তাদের style কাস্টমাইজ করতে পারবেন।
উদাহরণ: Simple Chart Creation
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFChart;
import java.io.FileOutputStream;
import java.io.IOException;
public class ChartExample {
public static void main(String[] args) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
// Add data for the chart
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("Category 1");
row.createCell(1).setCellValue(5);
row.createCell(2).setCellValue(10);
// Create a chart (this would be a placeholder for actual chart creation)
XSSFChart chart = (XSSFChart) sheet.createDrawingPatriarch().createChart(0, 0);
// Save the file
try (FileOutputStream fileOut = new FileOutputStream("chart_example.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
}
}
এখানে একটি চার্ট তৈরি করা হয়েছে যা Excel ফাইলে প্রদর্শিত হবে।
২. Performance Optimization
২.১. SXSSF (Streaming API) ব্যবহার
বড় Excel ফাইল তৈরির সময় SXSSF ব্যবহার করলে মেমরি ব্যবহার অনেক কমানো যায়। এটি শুধুমাত্র চলতি সারিগুলো মেমরিতে রাখে এবং বাকী সারিগুলো ডিস্কে লেখে, ফলে memory overflow থেকে রক্ষা পাওয়া যায়।
২.২. Cell Data Formatting Optimization
Cell ডেটার ফরম্যাটিংয়ের ক্ষেত্রে, খুব বেশি ফরম্যাটিং না করার চেষ্টা করুন, কারণ এটি ফাইল সাইজ বাড়াতে পারে এবং পারফরম্যান্স কমাতে পারে। শুধুমাত্র প্রয়োজনীয় ফরম্যাটগুলি ব্যবহার করুন।
২.৩. Buffering File Writing (Buffered Output)
FileOutputStream এর বদলে BufferedOutputStream ব্যবহার করলে ফাইল লেখার প্রক্রিয়া দ্রুত হবে এবং রিসোর্স খরচ কমবে।
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("optimized_example.xlsx"))) {
workbook.write(bos);
}
২.৪. Avoiding Frequent Calls to setCellValue
ডেটা সেট করার সময় বারবার setCellValue() কল না করে, একটি row তৈরি করার পর একাধিক সেলে একযোগে ডেটা প্রবাহিত করার চেষ্টা করুন।
২.৫. Avoiding Memory Leaks
অতিরিক্ত মেমরি ব্যবহার থেকে বাঁচতে, যখন আপনি SXSSF বা XSSF কাজ করেন, নিশ্চিত করুন যে আপনি অপ্রয়োজনীয় workbook বা sheet অবজেক্টগুলিকে ফ্রি করছেন। এর জন্য dispose() মেথড ব্যবহার করুন।
((SXSSFWorkbook) workbook).dispose(); // Dispose of temporary files
সারাংশ
Apache POI লাইব্রেরি শক্তিশালী এবং অনেক উন্নত ফিচার সরবরাহ করে, যা Excel, Word, এবং PowerPoint ফাইলের সাথে কাজ করার জন্য অত্যন্ত উপকারী। এর মধ্যে SXSSF (streaming API) ব্যবহার করে Excel ফাইলের পারফরম্যান্স অপটিমাইজেশন অন্যতম গুরুত্বপূর্ণ। ডেটা ভ্যালিডেশন, চিত্র এবং চার্ট তৈরি, এবং বিভিন্ন ফরম্যাটিং অপশনগুলির মাধ্যমে আপনার প্রজেক্টে ফাইল তৈরি করা আরও শক্তিশালী এবং কার্যকর হতে পারে।
পারফরম্যান্স অপটিমাইজেশনের জন্য মেমরি ব্যবহারের দিক থেকে সঠিক কৌশল গ্রহণ করা গুরুত্বপূর্ণ, যেমন SXSSF বা BufferedOutputStream ব্যবহার করা, যেগুলি বড় ডেটা সেটের সাথে কাজ করার সময় ফাইল লেখার কার্যকারিতা বৃদ্ধি করে।
Apache POI লাইব্রেরি ব্যবহার করে আপনি Excel ফাইল তৈরি বা ম্যানেজ করতে পারেন, তবে বড় Excel ফাইল (যেমন কয়েক লাখ সেল সহ) তৈরি করার সময় সাধারণ XSSF ব্যবহার করলে মেমরি সমস্যার সম্মুখীন হতে পারেন। এ সমস্যা এড়াতে, Apache POI একটি উন্নত বিকল্প প্রদান করে যা হল SXSSF (Streaming XML Spreadsheet Format)। SXSSF হলো XSSF এর একটি উন্নত সংস্করণ, যা বৃহৎ ফাইল তৈরি এবং প্রক্রিয়া করার জন্য মেমরি-দক্ষ পদ্ধতি ব্যবহার করে।
SXSSF কি?
SXSSF একটি স্ট্রিমিং API, যা XSSF ফাইল লেখার সময় ডেটা রিড ও রাইট করার প্রক্রিয়ায় memory ব্যবস্থাপনা করে। এটি Excel ফাইল তৈরি বা লেখার সময় একযোগভাবে কেবলমাত্র বর্তমান রো (row) এবং সংশ্লিষ্ট ডেটা মেমরিতে রাখে, ফলে মেমরি ব্যবহার খুবই কম হয়। এর ফলে, আপনি বড় বড় Excel ফাইল তৈরি করতে সক্ষম হন যা সাধারণ XSSF API দিয়ে সম্ভব নয়।
SXSSF ব্যবহারের সুবিধা
- Memory Efficiency: SXSSF শুধুমাত্র বর্তমান রো (row) মেমরিতে রাখে, পুরনো রো গুলি ডিস্কে লেখার পর মুছে ফেলা হয়।
- Large File Handling: হাজার হাজার বা লাখ লাখ সেল থাকা Excel ফাইল সহজেই তৈরি করা যায়।
- Performance: বড় ফাইল তৈরি করার সময় এটি সাধারণ XSSF এর তুলনায় দ্রুত কাজ করে।
1. SXSSF ব্যবহার করে Large Excel ফাইল তৈরি করা
এখানে একটি সাধারণ উদাহরণ দেখানো হচ্ছে, যেখানে SXSSF ব্যবহার করে একটি বড় Excel ফাইল তৈরি করা হয়েছে। আমরা ১ মিলিয়ন রো (row) এবং ১০টি কলাম ব্যবহার করব।
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class SXSSFExample {
public static void main(String[] args) throws IOException {
// SXSSFWorkbook তৈরি করা
Workbook workbook = new SXSSFWorkbook(100); // 100 rows in memory at a time
// Sheet তৈরি করা
Sheet sheet = workbook.createSheet("LargeDataSheet");
// ডেটা যোগ করা
for (int rowNum = 0; rowNum < 1000000; rowNum++) {
Row row = sheet.createRow(rowNum);
// প্রতিটি রো তে কিছু ডেটা ইনপুট করা
for (int colNum = 0; colNum < 10; colNum++) {
Cell cell = row.createCell(colNum);
cell.setCellValue("Row " + rowNum + " Col " + colNum);
}
// প্রতি 100 রো পর পুরনো রো মুছে ফেলবে (garbage collect)
if (rowNum % 100 == 0) {
((SXSSFWorkbook) workbook).flushRows();
}
}
// Excel ফাইল সংরক্ষণ করা
try (FileOutputStream fileOut = new FileOutputStream("large_excel_file.xlsx")) {
workbook.write(fileOut);
}
// Workbook বন্ধ করা
workbook.close();
}
}
এই কোডে:
- SXSSFWorkbook(100) ব্যবহার করা হয়েছে, যার মানে প্রতি 100 রো মেমরিতে থাকবে এবং পুরনো রো গুলি ফ্লাশ (flush) হবে।
- প্রতি 100 রো পর পুরনো রো মুছে ফেলা হয়, যা মেমরি ব্যবস্থাপনায় সহায়তা করে।
2. SXSSF এর Key Methods
SXSSF কাজ করার জন্য কিছু গুরুত্বপূর্ণ মেথড রয়েছে:
- flushRows(): এটি বর্তমান সেলে লেখা ডেটা ডিস্কে ফ্লাশ করে, এবং পুরনো রো গুলি মুছে ফেলে। এটি স্মৃতি (memory) অপটিমাইজ করতে সহায়তা করে।
- getSheetAt(): নির্দিষ্ট Sheet পাওয়া যায়।
- createSheet(): একটি নতুন শিট তৈরি করা হয়।
3. SXSSF এর সাথে Cell Style ব্যবহার
আপনি SXSSF এর সাথে cell styles বা formats ব্যবহার করতে পারবেন। উদাহরণস্বরূপ, আপনি date format, currency format বা font style যোগ করতে পারেন।
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFColor;
import java.io.FileOutputStream;
import java.io.IOException;
public class SXSSFWithStylesExample {
public static void main(String[] args) throws IOException {
// SXSSFWorkbook তৈরি করা
Workbook workbook = new SXSSFWorkbook(100);
// Sheet তৈরি করা
Sheet sheet = workbook.createSheet("StyledSheet");
// Cell Style তৈরি করা
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 0)));
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// ডেটা এবং স্টাইল ইনপুট করা
for (int rowNum = 0; rowNum < 100000; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int colNum = 0; colNum < 10; colNum++) {
Cell cell = row.createCell(colNum);
cell.setCellValue("Row " + rowNum + " Col " + colNum);
cell.setCellStyle(style);
}
// প্রতি 100 রো পর পুরনো রো মুছে ফেলবে
if (rowNum % 100 == 0) {
((SXSSFWorkbook) workbook).flushRows();
}
}
// Excel ফাইল সংরক্ষণ করা
try (FileOutputStream fileOut = new FileOutputStream("styled_large_excel_file.xlsx")) {
workbook.write(fileOut);
}
// Workbook বন্ধ করা
workbook.close();
}
}
এখানে:
- Bold Font এবং Yellow Background Color সহ একটি স্টাইল তৈরি করা হয়েছে, যা সেলগুলোর জন্য প্রযোজ্য।
- flushRows() ব্যবহৃত হয়েছে যাতে মেমরি অপ্টিমাইজ করা যায়।
4. SXSSF এর Limitations
SXSSF কিছু সীমাবদ্ধতা থাকতে পারে, যেমন:
- এটি শুধুমাত্র XSSF (XML-based) ফাইল ফরম্যাটে কাজ করে, অর্থাৎ HSSF (xls format) সাপোর্ট করে না।
- এতে কিছু advanced features (যেমন charts বা pivot tables) সাপোর্ট নাও থাকতে পারে।
সারাংশ
SXSSF হল Apache POI এর একটি অত্যন্ত কার্যকরী উপায় যা large Excel files তৈরি করতে সক্ষম। এটি মেমরি ব্যবস্থাপনা করে এবং শুধুমাত্র প্রয়োজনীয় রো গুলি মেমরিতে রাখে, যা বড় বড় ফাইল হ্যান্ডলিংয়ের জন্য অত্যন্ত উপযোগী। SXSSF ব্যবহার করে আপনি বড় Excel ফাইল দ্রুত তৈরি করতে পারবেন, বিশেষ করে যখন আপনি হাজার হাজার রো ডেটা ইনপুট করছেন। তবে এর কিছু সীমাবদ্ধতা যেমন HSSF সাপোর্ট না করা এবং কিছু অ্যাডভান্সড ফিচারের অপ্রতিষ্ঠান থাকতে পারে।
অ্যাপাচি পিওআই (Apache POI) লাইব্রেরি ব্যবহারের সময় অনেক বড় ফাইল বা ডেটা প্রসেসিং এর ক্ষেত্রে মেমরি ব্যবস্থাপনা একটি গুরুত্বপূর্ণ বিষয় হয়ে দাঁড়ায়। অ্যাপাচি পিওআই স্ট্রিমিং API এবং মেমরি অপটিমাইজেশনের মাধ্যমে কম মেমরিতে বড় ডকুমেন্ট ফাইল গুলি পরিচালনা করার জন্য কিছু কার্যকরী পদ্ধতি সরবরাহ করে।
স্ট্রিমিং API কি?
অ্যাপাচি পিওআই স্ট্রিমিং API এমন একটি উপায়, যা বড় Excel বা Word ফাইলের ডেটা প্রক্রিয়া করতে খুব কম মেমরি ব্যবহার করে। স্ট্যান্ডার্ড POI লাইব্রেরি সব ডেটা একসাথে মেমরিতে লোড করে, যা বড় ফাইল নিয়ে কাজ করার সময় মেমরি সমস্যা তৈরি করতে পারে। কিন্তু স্ট্রিমিং API ব্যবহার করলে ডেটা লাইনে লাইনে অথবা চাঙ্ক বাই চাঙ্ক লোড করা হয়, ফলে কম মেমরি খরচ হয় এবং বড় ফাইল প্রসেসিং আরো দ্রুত হয়।
স্ট্রিমিং API এর প্রধান সুবিধা:
- কম মেমরি ব্যবহারের ক্ষমতা: বড় ডেটা ফাইল বা এক্সেল শীটগুলোকে সেল বাই সেল, রো বাই রো লোড করে মেমরি অপটিমাইজেশন হয়।
- দ্রুত প্রসেসিং: কারণ এটি পুরো ফাইল একবারে লোড না করে, বরং ধীরে ধীরে ডেটা প্রসেস করে, এটি বড় ডেটা সেটের জন্য দ্রুত কাজ করে।
অ্যাপাচি পিওআই স্ট্রিমিং API ব্যবহার
Excel ফাইলের জন্য Streaming API ব্যবহার
অ্যাপাচি পিওআই এর SXSSF (Streaming XML Spreadsheet Format) API ব্যবহার করে আমরা .xlsx ফাইলগুলোর সাথে কম মেমরি ব্যবহার করে কাজ করতে পারি। এটি সম্পূর্ণ Excel ফাইলকে মেমরিতে লোড না করে, বরং ধীরে ধীরে ডেটা প্রসেস করে।
// Example of writing an Excel file using SXSSF for streaming
SXSSFWorkbook workbook = new SXSSFWorkbook();
SXSSFSheet sheet = workbook.createSheet("Sheet 1");
// Add rows and cells
for (int rownum = 0; rownum < 100000; rownum++) {
SXSSFRow row = sheet.createRow(rownum);
for (int cellnum = 0; cellnum < 10; cellnum++) {
SXSSFCell cell = row.createCell(cellnum);
cell.setCellValue("Row " + rownum + " Cell " + cellnum);
}
}
FileOutputStream fos = new FileOutputStream("streaming_example.xlsx");
workbook.write(fos);
fos.close();
workbook.dispose();
এখানে SXSSFWorkbook ব্যবহার করে ডেটা স্ট্রিমিং আকারে লেখার উদাহরণ দেওয়া হয়েছে, যা মেমরি ব্যবহারে দক্ষ।
মেমরি অপটিমাইজেশন কৌশল
মেমরি ব্যবহারে উন্নতি করতে কিছু কৌশল:
- SXSSF ব্যবহার: বড় Excel ফাইলগুলোর সাথে কাজ করার সময়
SXSSFক্লাস ব্যবহার করতে হবে, কারণ এটি পুরনো HSSF এর মতো পুরো ফাইলকে মেমরিতে লোড না করে স্ট্রিম আকারে ডেটা লেখে এবং পড়ে। - XSSF এর পরিবর্তে SXSSF:
.xlsxফাইলের জন্য যখনXSSFব্যবহার করা হয়, তখন সমস্ত ডেটা মেমরিতে লোড হয়। তবেSXSSFব্যবহার করলে মেমরি খরচ কম হয়। - ডেটা প্রসেসিং স্ট্রিম আকারে করা: একসাথে সব ডেটা লোড করার পরিবর্তে, ডেটাকে এক লাইনে বা এক চাঙ্কে প্রসেস করা উচিত, যেমন POI এর স্ট্রিমিং API এর মাধ্যমে।
- ক্যাশে ব্যবহার: যদি অনেক সেল বা রো থাকে, তবে কিছু ডেটা ক্যাশে রেখে পরবর্তীতে প্রয়োজনে লোড করা যেতে পারে। এটি মেমরি ব্যবহারের দক্ষতা বৃদ্ধি করে।
সারাংশ
অ্যাপাচি পিওআই এর স্ট্রিমিং API, বিশেষ করে SXSSF, বড় ডেটা ফাইল পরিচালনায় মেমরি অপটিমাইজেশনের জন্য একটি কার্যকরী পদ্ধতি। এটি কম মেমরি ব্যবহারের মাধ্যমে Excel, Word, এবং অন্যান্য ডকুমেন্ট ফাইলগুলির সাথে কাজ করার সক্ষমতা বাড়ায়। স্ট্রিমিং API ব্যবহার করলে বড় ফাইলের সাথে কাজ করার সময় মেমরি সাশ্রয়ী এবং দ্রুত পারফর্মেন্স পাওয়া যায়, যা অনেক ক্ষেত্রে অপরিহার্য।
Apache POI ব্যবহার করে আপনি Excel ফাইলে একাধিক শীট তৈরি এবং পরিচালনা করতে পারবেন। XSSF (Excel 2007 এবং পরবর্তী সংস্করণের জন্য) এবং HSSF (Excel 97-2003 সংস্করণের জন্য) ফাইল ফরম্যাটের জন্য সমর্থিত।
এই টিউটোরিয়ালে, আমরা একাধিক শীট তৈরি, ডেটা অ্যাড করা, এবং শীটগুলির মধ্যে ডেটা কপি করার প্রক্রিয়া দেখব।
1. একাধিক শীট তৈরি এবং ডেটা যোগ করা (XSSF)
এখানে আমরা একটি .xlsx ফাইল তৈরি করব এবং এতে দুটি শীট যোগ করব—প্রথম শীটে কিছু ডেটা থাকবে, এবং দ্বিতীয় শীটে আলাদা ডেটা থাকবে।
উদাহরণ: একাধিক শীট তৈরি এবং ডেটা যোগ করা
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class MultipleSheetsExample {
public static void main(String[] args) throws IOException {
// নতুন Excel ফাইল তৈরি
XSSFWorkbook workbook = new XSSFWorkbook();
// প্রথম শীট তৈরি এবং ডেটা যোগ করা
Sheet sheet1 = workbook.createSheet("Sheet1");
Row row1 = sheet1.createRow(0);
row1.createCell(0).setCellValue("Name");
row1.createCell(1).setCellValue("Age");
Row row2 = sheet1.createRow(1);
row2.createCell(0).setCellValue("John");
row2.createCell(1).setCellValue(25);
// দ্বিতীয় শীট তৈরি এবং ডেটা যোগ করা
Sheet sheet2 = workbook.createSheet("Sheet2");
Row row3 = sheet2.createRow(0);
row3.createCell(0).setCellValue("Product");
row3.createCell(1).setCellValue("Price");
Row row4 = sheet2.createRow(1);
row4.createCell(0).setCellValue("Laptop");
row4.createCell(1).setCellValue(1000);
// ফাইল সেভ করা
try (FileOutputStream fileOut = new FileOutputStream("multiple_sheets_example.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
System.out.println("একাধিক শীট সহ Excel ফাইল সফলভাবে সেভ হয়েছে!");
}
}
এটি কী করবে:
- একটি Excel (.xlsx) ফাইল তৈরি করবে।
- প্রথম শীটে Name এবং Age কলাম এবং কিছু ডেটা যোগ করবে।
- দ্বিতীয় শীটে Product এবং Price কলাম এবং কিছু ডেটা যোগ করবে।
- ফাইলটি multiple_sheets_example.xlsx নামে সেভ করবে।
2. এক শীট থেকে অন্য শীটে ডেটা কপি করা (XSSF)
এখানে আমরা একটি শীট থেকে ডেটা কপি করে অন্য শীটে বসাবো।
উদাহরণ: শীট থেকে শীটে ডেটা কপি করা
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyDataBetweenSheetsExample {
public static void main(String[] args) throws IOException {
// Excel ফাইল ওপেন করা
FileInputStream fileIn = new FileInputStream("multiple_sheets_example.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(fileIn);
// প্রথম শীট থেকে ডেটা রিড করা
Sheet sheet1 = workbook.getSheetAt(0);
Row row1 = sheet1.getRow(1);
// দ্বিতীয় শীট তৈরি করা, যদি না থাকে
Sheet sheet2 = workbook.getSheetAt(1);
// প্রথম শীটের ডেটা দ্বিতীয় শীটে কপি করা
Row newRow = sheet2.createRow(2);
newRow.createCell(0).setCellValue(row1.getCell(0).getStringCellValue()); // Name
newRow.createCell(1).setCellValue(row1.getCell(1).getNumericCellValue()); // Age
// ফাইল সেভ করা
try (FileOutputStream fileOut = new FileOutputStream("copied_data_example.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
fileIn.close();
System.out.println("শীট থেকে শীটে ডেটা সফলভাবে কপি করা হয়েছে!");
}
}
এটি কী করবে:
- পূর্বে তৈরি multiple_sheets_example.xlsx ফাইলটি ওপেন করবে।
- প্রথম শীটের John এবং 25 ডেটা কপি করে দ্বিতীয় শীটে বসাবে।
- ফাইলটি copied_data_example.xlsx নামে সেভ করবে।
3. শীটের নাম পরিবর্তন এবং শীট মুছে ফেলা (XSSF)
এখানে, আমরা একটি শীটের নাম পরিবর্তন এবং একটি শীট মুছে ফেলার প্রক্রিয়া দেখব।
উদাহরণ: শীটের নাম পরিবর্তন এবং শীট মুছে ফেলা
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class RenameAndDeleteSheetExample {
public static void main(String[] args) throws IOException {
// Excel ফাইল ওপেন করা
FileInputStream fileIn = new FileInputStream("multiple_sheets_example.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(fileIn);
// প্রথম শীটের নাম পরিবর্তন
workbook.setSheetName(0, "Renamed_Sheet1");
// দ্বিতীয় শীট মুছে ফেলা
workbook.removeSheetAt(1);
// ফাইল সেভ করা
try (FileOutputStream fileOut = new FileOutputStream("modified_example.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
fileIn.close();
System.out.println("শীটের নাম পরিবর্তন এবং শীট মুছে ফেলা সফল হয়েছে!");
}
}
এটি কী করবে:
- multiple_sheets_example.xlsx ফাইলটি ওপেন করবে।
- প্রথম শীটের নাম Renamed_Sheet1 নামকরণ করবে।
- দ্বিতীয় শীটটি মুছে ফেলবে।
- পরিবর্তিত ফাইল modified_example.xlsx নামে সেভ করবে।
সারাংশ
Apache POI ব্যবহার করে আপনি Excel ফাইলে একাধিক শীট তৈরি, ডেটা যোগ, এবং শীটগুলির মধ্যে ডেটা কপি বা স্থানান্তর করতে পারবেন। এছাড়া, শীটের নাম পরিবর্তন, শীট মুছে ফেলা এবং বিভিন্ন শীটের ডেটা ম্যানিপুলেশন করা সহজ। এই সব ফিচারগুলো আপনাকে Excel ফাইলের ডাইনামিক ম্যানিপুলেশন করতে সহায়তা করবে, যা ব্যবসায়িক ডেটা প্রক্রিয়াকরণ এবং রিপোর্ট তৈরি করতে অত্যন্ত কার্যকর।
Apache POI ব্যবহার করে Excel (এবং অন্যান্য Office ফাইল) তৈরি বা সম্পাদনা করার সময় ডেটার পরিমাণ বেশি হলে কার্যকারিতা সমস্যা হতে পারে। যেমন, বড় ফাইল লোড বা ডেটা লিখতে অনেক সময় লাগতে পারে। এই ধরনের সমস্যা এড়ানোর জন্য বিভিন্ন Performance Tuning কৌশল ব্যবহার করা যেতে পারে। এই পোস্টে কিছু গুরুত্বপূর্ণ কৌশল আলোচনা করা হলো যেগুলি Apache POI ব্যবহার করে ডকুমেন্ট প্রসেসিংয়ের পারফরম্যান্স উন্নত করতে সহায়তা করবে।
১. SXSSF (Streaming User Model) ব্যবহার করা
SXSSF (Streaming XML Spreadsheet Format), Apache POI এর একটি বিশেষ ফিচার, যা large Excel files (অর্থাৎ, অনেক বড় ডেটা সম্বলিত ফাইল) তৈরির ক্ষেত্রে কার্যকরী। এটি XSSF এর একটি স্ট্রিমিং সংস্করণ, যা memory efficiency বৃদ্ধি করে। যখন আপনি বড় ডেটা এক্সপোর্ট করবেন তখন এটি র্যাম ব্যবহার কমিয়ে ফাইল সঞ্চয় করে।
কোড উদাহরণ: SXSSF ব্যবহার করে Excel ফাইল তৈরি করা
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class SXSSFExample {
public static void main(String[] args) throws IOException {
// SXSSFWorkbook তৈরি করা (XSSF এর স্ট্রিমিং সংস্করণ)
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 100 রো একসাথে মেমরিতে ধারণ করা হবে
// Sheet তৈরি করা
Sheet sheet = workbook.createSheet("Sheet1");
// ডেটা যোগ করা
for (int rowNum = 0; rowNum < 1000000; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int colNum = 0; colNum < 10; colNum++) {
Cell cell = row.createCell(colNum);
cell.setCellValue("Row " + rowNum + " Cell " + colNum);
}
}
// Excel ফাইল সেভ করা
FileOutputStream fileOut = new FileOutputStream("largeFile.xlsx");
workbook.write(fileOut);
fileOut.close();
// Workbook বন্ধ করা
workbook.close();
System.out.println("Excel ফাইল সফলভাবে তৈরি করা হয়েছে!");
}
}
কোড ব্যাখ্যা:
SXSSFWorkbook: এটি এক্সেল শিটে বড় ডেটা প্রসেস করার সময় SXSSF (Streaming Excel format) ব্যবহার করে, যা কার্যকরীভাবে মেমরি ব্যবহারের পরিমাণ কমায়।new SXSSFWorkbook(100): এটি ১০০ রো পর্যন্ত মেমরিতে ধারণ করবে এবং অতিরিক্ত রো প্রসেস করতে disk-based প্রসেসিং করবে।
২. CellStyle পুনরায় ব্যবহার করা
Excel ফাইল তৈরি করার সময়, প্রতিটি সেলে আলাদা CellStyle প্রয়োগ করলে তা খুব বেশি মেমরি খরচ করতে পারে এবং পারফরম্যান্স কমিয়ে দিতে পারে। একাধিক সেলে একই CellStyle প্রয়োগ করতে পারেন, যা মেমরি এবং পারফরম্যান্স সংরক্ষণ করবে।
কোড উদাহরণ: একাধিক সেলে একই CellStyle ব্যবহার করা
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class CellStyleExample {
public static void main(String[] args) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// একবার CellStyle তৈরি করা
CellStyle style = workbook.createCellStyle();
style.setBorderBottom(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
// ডেটা যোগ করা
for (int i = 0; i < 1000; i++) {
Row row = sheet.createRow(i);
for (int j = 0; j < 10; j++) {
Cell cell = row.createCell(j);
cell.setCellValue("Row " + i + " Cell " + j);
cell.setCellStyle(style); // পুনরায় একই স্টাইল প্রয়োগ করা
}
}
// Excel ফাইল সেভ করা
FileOutputStream fileOut = new FileOutputStream("styledFile.xlsx");
workbook.write(fileOut);
fileOut.close();
// Workbook বন্ধ করা
workbook.close();
System.out.println("Excel ফাইল সফলভাবে তৈরি করা হয়েছে!");
}
}
কোড ব্যাখ্যা:
- এখানে, আমরা একবার CellStyle তৈরি করে সেটি প্রতিটি সেলে প্রয়োগ করেছি। এর ফলে, মেমরি ব্যবহারের পরিমাণ কমবে এবং পারফরম্যান্স উন্নত হবে।
৩. Workbooks এবং Sheets এর জন্য প্রপার্টি ব্যবহার করা
প্রতিটি Workbook এবং Sheet তৈরি করার সময় কিছু প্রপার্টি সেট করতে পারেন, যা পারফরম্যান্স বাড়াতে সাহায্য করবে। যেমন, ফাইল তৈরি করার সময় ডিফল্ট Excel style ব্যবহার করার চেয়ে আপনার কাস্টম স্টাইল প্রয়োগ করা আরও দ্রুত হতে পারে।
৪. XSSF ফাইলের জন্য XMLBeans কম্প্রেশন সক্ষম করা
XSSF ফাইলের জন্য আপনি XMLBeans compression সক্ষম করতে পারেন, যা ফাইলের সাইজ কমাতে সাহায্য করবে এবং পারফরম্যান্স বাড়াবে। এই কম্প্রেশন ডকুমেন্টের সাইজ কমাতে কার্যকরী।
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
public class CompressionExample {
public static void main(String[] args) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
// XmlOptions দিয়ে কম্প্রেশন সক্ষম করা
XmlOptions options = new XmlOptions();
options.setSaveCompressed(true);
// XMLBeans দিয়ে কনফিগারেশন
XmlObject xml = workbook.getPackage();
XmlCursor cursor = xml.newCursor();
cursor.toEndToken();
// ফাইল সেভ করা
FileOutputStream fileOut = new FileOutputStream("compressedFile.xlsx");
workbook.write(fileOut);
fileOut.close();
// Workbook বন্ধ করা
workbook.close();
}
}
৫. Row Cache এবং Cell Cache ব্যবহার করা
SXSSF এবং XSSF এ একাধিক রো এবং সেল প্রক্রিয়াকরণের জন্য আপনি Row Cache এবং Cell Cache ব্যবহার করতে পারেন। এর মাধ্যমে, সেলের ডেটা মেমরিতে অনেক সময় ধরে রাখা হয়, এবং পরবর্তীতে সেই ডেটা দ্রুত ব্যবহার করা যায়।
কোড উদাহরণ: Row এবং Cell Cache ব্যবহার করা
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 100 রো পর্যন্ত মেমরি ক্যাশে রাখা
workbook.setCompressTempFiles(true); // অস্থায়ী ফাইল কম্প্রেস করা
৬. Parallel Processing (Multithreading) ব্যবহার করা
যখন আপনি বড় ডেটা প্রসেস করছেন, তখন Multithreading ব্যবহার করে আপনি একাধিক থ্রেডে কাজ ভাগ করতে পারেন। তবে এটি Apache POI এর জন্য একটু জটিল হতে পারে, কারণ POI সিঙ্ক্রোনাস কাজ করে। তবে আপনি ExecutorService বা CompletableFuture এর মাধ্যমে প্রসেসিং স্পিড উন্নত করতে পারেন।
উপসংহার
Apache POI এর মাধ্যমে Excel ফাইল ম্যানিপুলেশন বা অন্যান্য Office ফাইল প্রক্রিয়া করার সময় পারফরম্যান্স উন্নত করার জন্য কিছু কার্যকর কৌশল রয়েছে:
- SXSSF ব্যবহার করে মেমরি ব্যবহারের পরিমাণ কমানো
- একাধিক সেলে একই CellStyle ব্যবহার করে মেমরি সংরক্ষণ
- XMLBeans compression সক্ষম করে ফাইল সাইজ কমানো
- Row Cache এবং Cell Cache ব্যবহার করা
- Parallel Processing বা Multithreading প্রয়োগ করা
এই কৌশলগুলির মাধ্যমে আপনি বড় ডেটা প্রসেসিংয়ের সময় Apache POI এর পারফরম্যান্স উন্নত করতে পারেন।
Read more